#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <time.h>
#include <stdlib.h>
#include <string.h>

#if 0
       #include <sys/types.h>
       #include <unistd.h>

       off_t lseek(int fd, off_t offset, int whence);
函数作用：偏移文件的光标到指定为止
参数：
    fd：文件描述符 
    offset:  基于第三个参数的基准点，进行的偏移量
    whence:  文件的基准点 文件的参考点
       SEEK_SET
              将文件的光标偏移到开头 --此时文件光标在开头

       SEEK_CUR
              文件光标位置不变，此时文件光标就在原来的位置

       SEEK_END
              将文件的光标偏移到末尾--此时文件光标在末尾

    比如： 基于文件开头，向后偏移2个字节
          lseek(fd,2,SEEK_SET);
          基于文件末尾，向前偏移4个字节
          lseek(fd,-4,SEEK_END);
返回值：
    成功返回   此时文件光标距离文件开头的字节数
    失败返回： -1
        int ret = lseek(fd,0,SEEK_END);
        此时ret就是文件末尾到开头的字节数，那就是文件的大小
#endif 

int fileLength(int fd)
{
    //1、先保存此时文件的光标位置
    int curPos = lseek(fd,0,SEEK_CUR);
    //2、将文件的光标偏移到文件末尾
    //3、获取lseek的返回值就是文件的字节数
    int size = lseek(fd,0,SEEK_END);
    
    //4、将文件的光标偏移到之前保存的位置
    lseek(fd,curPos,SEEK_SET);

    return size;
}

int main()
{
    int fd = open("./1.txt", O_RDWR|O_CREAT|O_TRUNC, 0666);
    if(fd == -1){
        perror("open");
        return -1;
    }

    int sz = fileLength(fd);
    printf("sz = %d\n",sz);
    
    //写入数据
    char buf[] = "zouwei";
    write(fd,buf,strlen(buf));

    //如何改变文件的光标 到开头
    lseek(fd,0,SEEK_SET);


    char rbuf[1024] = {0};
    int ret = read(fd,rbuf,sizeof(rbuf));

    printf("ret = %d, rbuf = %s\n",ret,rbuf);

    close(fd);
}